#include <bits/stdc++.h>
using namespace std;
/*
dp[n]:n个圆盘需要移动多少次，然后n个圆盘分为上面n-1个圆盘和下面一个圆盘，上面n-1个圆盘需要移动dp[n-1]次
三柱汉诺塔：
n-1个圆盘从A移动到B：dp[n-1]，B到C同理;
最下面的圆盘从A移动到C：1次
所以dp[n]=2*dp[n-1]+1;
四柱汉诺塔：
A分为n-k,k,先将n-k移动到B即dp[n-k],接下来把A中剩下的k移动到D即dp[k]',
dp[k]'=2^k-1;因为dp[1]=1,dp[2]=3....
将B柱的n-k个移动到D即：dp[n-k]=2*dp[n-k]+1;
所以dp[n]=dp[k]+dp[n-k]=2^k+2*dp[n-k]
*/
int f, dp[55], INF = 0x3f3f3f3f;

int main()
{
	cin >> f;
	memset(dp, INF, sizeof(dp));
	cout << 1 << endl
		 << 3 << endl;
	dp[0] = 0, dp[1] = 1, dp[2] = 3;
	for (int i = 3; i <= f; i++)
	{
		for (int k = 1; k < i; k++)
		{
			if (dp[i] > 2 * dp[i - k] + pow(2, k) - 1)//dp[n]=2^k+2*dp[n-k]
				dp[i] = 2 * dp[i - k] + pow(2, k) - 1;
		}
		cout << dp[i] << endl;
	}
	return 0;
}